<?php
namespace app\crm\logic;

/**
 * 该方法仅用于搜索的公共实例
 */
class WhereLogic
{
	/*-------------------------------------------------------*
	 * 含义 			传参适用范围				调用的方法
	 * 等于  		[=,eq]					whereEq
	 * 不等于		[!=,neq]				whereNotEq
	 * 在里面		[in]					whereIn
	 * 不在里面		[not in]			    whereNotIn
	 * 大于			[>,gt]					whereGt									
	 * 大于且等于	[>=,egt]				whereEgt
	 * 小于 			[<,lt]					whereLt
	 * 小于且等于	[<=,elt]				whereElt
	 * like 		[like]					whereElt
	 *-------------------------------------------------------*/

	private $whereSearch 					= array();				// 搜索集
	private $whereType 						= array();				// 搜索集配置
	private $returWhere 					= array();				// 返回的搜索条件

	/***
	 * 设置搜索集
	 * @param array $whereSearch  	{[key=>val]}		需要搜索的数据集
	 * @param array $type 		  	0,1	 				1数据补充(存在重复时进行替换) 0数据重构
	 */
	public function setWhereSearch(array $whereSearch,int $type=0){
		if ($type == 1) {
			foreach($whereSearch as $key => $value){
				$this->whereSearch[$key]	= $value;
			}
			// print_r($this->whereSearch);
			return ;
		}
		$this->whereSearch 					= $whereSearch;
		return ;
	}

	/***
	 * 设置搜索集的配置
	 * @param array $whereSearch  	{[key=>val]}		需要搜索的数据集
	 * @param array $type 		  	0,1	 				1数据补充 0数据重构
	 */
	public function setWhereType(array $whereType,int $type=0){
		if ($type == 0){
			$this->whereType 				= $whereType; 
		}else if ($type == 1) {
			foreach($whereType as $key => $value){
				$this->whereType[$key]		= $value;
			}
		}
		return ;
	}


	/***
	 * 封装的搜索设置集合
	 * @param array $whereSearch  	{[key=>val]}		需要搜索的数据集
	 * @param array $whereType 		{[key=>val]}		搜索类型
	 */
	public function getWhere(): array
	{
		/**
		 * $key 		参数取值
		 * $val 		搜索类型
		 */ 
		$whereSearch   	= $this->whereSearch; 
		$whereType     	= $this->whereType; 
		// print_r($this->whereSearch);//exit;
		// print_r($this->whereType);//exit;
		foreach($whereType as $key => $val){
			if (isset($whereSearch[$key])) {
				$param = $whereSearch[$key];
				switch($val){
					case '=':		// whereEq
						if (is_array($param)) {
							$type 			= $param[1];
							$value 			= $param[0];
						}else{
							$type 			= 0;
							$value 			= $param;
						}
						$this->whereEq($key,$value,$type);
						break;
					case '!=':		// whereNotEq
						break;
					case 'in':		// whereIn
						break;
					case 'not in':	// whereNotIn
						break;
					case '>':		// whereGt
						break;
					case '>=':		// whereEgt
						break;
					case '<':		// whereLt
						break;
					case '<=':		// whereElt
						break;
					case 'like':	// whereLike
						if (is_array($param)) {
							$type 			= $param[1];
							$value 			= $param[0];
						}else if(is_string($param)){
							$type 			= 0;
							$value 			= $param;
						}else{
							break;
						}
						// print_r($key);
						// print_r($value);
						// print_r($type);exit;
						$this->whereLike($key,$value,$type);
						break;
					default:
						break;
				}
			}
		}
		//print_r('打印所有的搜索条件');exit;
		// print_r($this->returWhere);
		return $this->returWhere;
	}

	/**
	 * whereEq
	 * @param string $key 		搜索字段
	 * @param string $val 		搜索内容
	 * @param int 	 $type  	搜索类型 0不能为空 1可以为空
	 */ 
	private function whereEq(string $key,string $value,int $type=0)
	{
		if (($type == 0 && !empty($value)) || $type == 1) {
			array_push($this->returWhere,[$key,'=',$value]);
		}
		return ;
	}

	// /**
	//  * whereNeq
	//  */
	// private function whereNotEq()
	// {

	// }

	// /**
	//  * whereNeq
	//  */
	// private function whereNeq()
	// {

	// }

	// /**
	//  * whereIn
	//  */
	// private function whereIn()
	// {

	// }

	/**
	 * whereNotIn
	 */
	private function whereIn()
	{
		$setIn = [$key,'in',['1','2']];
		array_push($this->returWhere,$setIn);
		return ;
	}

	// /**
	//  * whereGt
	//  */
	// private function whereGt()
	// {

	// }

	// /**
	//  * whereEgt
	//  */
	// private function whereEgt()
	// {

	// }

	// /**
	//  * whereLt
	//  */
	// private function whereLt()
	// {

	// }

	// /**
	//  * whereElt
	//  */
	// private function whereElt()
	// {

	// }

	/**
	 * whereLike
	 * 该搜索会自动过滤空数据
	 * @param string $key 		搜索字段
	 * @param string $val 		搜索内容
	 * @param int 	 $type  	搜索类型 0 %**% 1 %** 2**%
	 */ 
	private function whereLike(string $key,string $value,int $type=0)
	{
		// print_r($key);
		// print_r($value);
		// print_r($type);exit;
		if (!empty($value)) {
			if ($type == 0) {
				$setLike = '%'.$value.'%';
			}else if ($type == 1) {
				$setLike = '%'.$value;
			}else if ($type == 2) {
				$setLike = $value.'%';
			}else{
				return ;
			}
			array_push($this->returWhere,[$key,'like',$setLike]);
		}
		return ;
	}
}